Skip to content

Conversation

@bkoropoff
Copy link
Contributor

This began as an attempt to fix an ICE in borrowck (issue #17655), but the rabbit hole went pretty deep. I ended up plumbing support for capture-by-reference unboxed closures all the way into trans.

Closes issue #17655.

…losures

This prevents a later ICE in borrowck.

Closes issue #17655
In particular, this causes mutation of an upvar to correctly mark
it as mutable during adjustment.  This makes borrowck correctly
flag conflicting borrows, etc.

We still seem to generate incorrect code in trans which copies the upvar
by value into the closure.  This remains to be fixed.
Treat upvars of capture-by-reference unboxed closures as references
with appropriate regions and mutability.
Store references to the freevars instead of copies when constructing
the environment and insert an additional load when reading them from
the environment.
This test works as a regression test for issue #17655.  It also
exercises mutation of by-ref upvars.
@huonw
Copy link
Contributor

huonw commented Oct 3, 2014

r? @pcwalton

@pcwalton
Copy link
Contributor

pcwalton commented Oct 3, 2014

This looks good. Could you add some tests for Fn and FnOnce closures as well? Thanks!

@bkoropoff
Copy link
Contributor Author

Added some more tests.

bors added a commit that referenced this pull request Oct 4, 2014
This began as an attempt to fix an ICE in borrowck (issue #17655), but the rabbit hole went pretty deep.  I ended up plumbing support for capture-by-reference unboxed closures all the way into trans.

Closes issue #17655.
@bors bors closed this Oct 4, 2014
lnicola pushed a commit to lnicola/rust that referenced this pull request Aug 13, 2024
perf: Segregate syntax and semantic diagnostics

Closes rust-lang#17731
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants